package com.dp.server;

import org.h2.table.Plan;

import com.dp.client.dto.PlanDeVueloDTO;
import com.dp.client.dto.RutasVueloEnvio;
import com.dp.client.servicios.MapaStatic.IServiciosMapaStatic;
import com.dp.server.entities.Almacen;
import com.dp.server.entities.PlanDeVuelo;
import com.dp.server.entities.Vuelo;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class IServiciosMapaStaticImpl extends RemoteServiceServlet implements IServiciosMapaStatic{

	@Override
	public String getRutaVuelo(RutasVueloEnvio rutas) {
		int [] vuelos=new int [rutas.vuelos.size()];
		for ( int i=0 ; i < rutas.vuelos.size() ; i++ ){
			vuelos[ i ] = rutas.vuelos.get(i).idVuelo;
		}
		/*int []estancias = PlanDeVuelo.tomaCascara(vuelos).getIdEstancia();*/
		MantenimientoGenerico<Vuelo> mant=new MantenimientoGenerico("Vuelo");
		int [] estancias = new int[rutas.vuelos.size()*2+1];
		Vuelo v=null;
		for (int i=0;i<rutas.vuelos.size();i++){
			v= mant.buscarID(rutas.vuelos.get(i).idVuelo);
			estancias[i*2]=v.getIdOrigen();
		}
		estancias[rutas.vuelos.size()*2] = v.getIdDestino();
		return obtenerURL(estancias, -1,"400","400");
		/*String url="http://maps.googleapis.com/maps/api/staticmap?center=";
		String center="63.259591,-144.667969";
		url+=center;
		url+="&zoom=6&size=400x400";
		String marker1="&markers=color:blue%7Clabel:S%7C63.259591,-144.6679698";
		url+=marker1;
		String marker2="&markers=color:blue%7Clabel:S%7C62.259591,-144.6679698";
		url+=marker2;
		String path="&path=color:0x00FFFF|weight:5|63.259591,-144.6679698|62.259591,-144.6679698";
		url+=path;
		url+="&key=AIzaSyAYYzvV6PwPTJZK_fP8lryyqz4HiK6eBGk&sensor=false";
		return url;*/
		
	}

	@Override
	public String getRutaPlanVuelo(int planDeVuelo) {
		System.out.println("plan de vuelo "+planDeVuelo);
		
		
		MantenimientoGenerico<PlanDeVuelo> mant=new MantenimientoGenerico("PlanDeVuelo");
		
		PlanDeVuelo plan=mant.buscarID(planDeVuelo);
		int [] estancias=plan.getIdEstancia();
		int actual=plan.getIndiceActualReserva();
		return obtenerURL(estancias,actual,"800","800");
	}

	private String obtenerURL(int[] estancias, int actual,String width, String height) {
		MantenimientoGenerico<Almacen> mantAlmacen=new MantenimientoGenerico("Almacen");
		String url="http://maps.googleapis.com/maps/api/staticmap?";
		url+="&size="+width+"x"+height;
		//String colorVisitado="0xFFCD00";
		//String colorActual="0xFF6400";
		//String colorVisitaFutura="0xBE008A";
		String colorVisitado = "0xFF0000";
		String colorActual = "0xFFFF00";
		String colorVisitaFutura = "0x00CC00";
		Almacen a=null;
		String [] colores = new String [estancias.length];
		Almacen [] almacenes = new Almacen[estancias.length];
		for (int i=0;i<estancias.length;i++){
			colores[i]=colorVisitaFutura;
			if (i==0 || i%2==0){
				a=mantAlmacen.buscarID(estancias[i]);
				almacenes[i]=a;
			}
		}
		
		if (actual>=0){
			String color=colorVisitado;
			for ( int i=0 ; i<estancias.length ; i++ ){
				if(i==actual) color=colorActual;
				if (i>actual) break;
				colores[i]=color;
			}
		}
		
		
		char [] letras = {'A','B','C','D','E'};
		for(int i=0 ; i<estancias.length ; i+=2){
			a=almacenes[i];
			String marker="&markers=color:"+colores[i]+"%7Clabel:"+letras[i/2]+"%7C";
			url+= marker + a.getLatitud() + "," + a.getLongitud();
		}
		
		for(int i=0 ; i<estancias.length-2 ; i+=2){
			Almacen aInicial=almacenes[i];
			Almacen aFinal=almacenes[i+2];
			url+="&path=color:"+colores[i+1]+"|weight:5";
			System.out.println(colores[i+1]);
			url+="|"+aInicial.getLatitud()+","+aInicial.getLongitud()+"|"+aFinal.getLatitud()+","+aFinal.getLongitud();
		}
		
		
		url+="&key=AIzaSyAYYzvV6PwPTJZK_fP8lryyqz4HiK6eBGk&sensor=false";
		System.out.println("este url "+url);
		return url;

		
	}
	
	@Override
	public PlanDeVueloDTO getPlanDeVueloDTO(int idPlan) {
		MantenimientoGenerico<PlanDeVuelo> mPlan = new MantenimientoGenerico<PlanDeVuelo>("PlanDeVuelo");
		PlanDeVuelo plan = mPlan.buscarID( idPlan );
		if( plan== null ) return null;
		return plan.extractDTO();
	}
}
